通信障害とGoogle Play Store App


概要

Androidで通信状況がアレなときに、

Platformの用意したサーバと連絡がとれないくせに購入できたことにするGoogleさんのPlayStoreAppの仕様最高にロックだぞみたいな事案にあたった。

きっと悪い夢だ。俺の使ってるプラグインとかコードのバグに違いない。



内容

以下のような手順で発生する。

Pasted Graphic.tiff

・StoreAppの通信失敗が原因での失敗なのにUser Cancelled扱いにする

・そのくせ課金は済んでるのでどっかのタイミングでinventoryに購入済み状態でレシートが現れる


みたいなの闇で楽しい。


UnityでAndroidのやつ作ってて見つけた挙動なので、Prime31とかのプラグインがUser Cancelled を返してるのかも知れないので、

追う。




メモ for https://www.websequencediagrams.com

client ->+ playStoreApp: start purchase


playStoreApp ->+ google: start purchase


note right of google


ここで、ユーザーが購入可否を提案され、

購入しますか? ハイ を押した瞬間に端末をオフラインにすると、


clientがplayStoreAppから受け取る返答は

User Cancelled (-1005) になり、


さらにplayStoreAppには「購入済み」状態でチケットが発生、

その後のclient内でのqueryInventoryとかでの取得で

「購入済み」状態で確認できる。


つまりこれ、課金はされてるのでは?

オフラインになって通信失敗したのにUser Cancelledにしたり

課金されたりでうん???っていう気持ち。


clientとplayStoreAppの間をプラグインで実現してるんで、

その間でUser Cancelledはコードのミスとかで

発生しているかもしれないが、

チケットが発生するのはどうなのこれ。

end note


google-->-playStoreApp: ???


note right of playStoreApp


課金チケット爆誕、

以降適当なタイミングで

inventoryに現れるようになり、

その状態は0 = purchased

end note


playStoreApp-->-client: User Cancelled


note left of client

えっ

キャンセルなんかしてねーし

end note